home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / INFO / DOSTIPS6.ZIP / DOSSCTY < prev    next >
Text File  |  1986-12-26  |  4KB  |  131 lines

  1.                    Hard Disk Write Protection
  2.        (PC Magazine Vol 6 No 1 Jan 13, 1987 User-to-User)
  3.  
  4.      A User-to-User article (PC Mag Vol 5 No 15 July 23, 1986)
  5. described a method to disable all access to the hard disk.  The
  6. PROTECT.COM program created by PROTECT.BAS or PROTECT.ASM is a much
  7. better method.  It simulates a write-protect tab by allowing read
  8. access but not write access to the hard disk.  The floppy drives
  9. aren't affected.  To apply the write-protect tab, just type PROTECT
  10. at the DOS prompt.  Typing PROTECT again will alternately switch the
  11. protection off and on.
  12.      The first time the program runs, it grabs interrupt 13h so that
  13. it can monitor all requests for disk I/O.  When a disk drive operation
  14. is requested, the program checks to see if a fixed disk drive was
  15. selected.  If so, the error code for write protection is returned and
  16. DOS displays it usual error message.  All other disk accesses are
  17. allowed to proceed normally.
  18.      Once the program has been installed, it can turn itself off or on
  19. by searching through memory for the original copy and then resetting
  20. its switch.  When the program is switched off, all disk operations are
  21. allowed to proceed normally.
  22.      Editor's Note:  This works by allowing writes only to drives A:
  23. and B:.  If you have a 3 1/2-inch drive installed as D: or a RAMdisk
  24. as E;, PROTECT will prevent you from writing to these as well.  To
  25. adapt the program so that it can write to these drives but not to your
  26. hard disk, add the appropriate:
  27.  
  28. CMP    DL,03H
  29. JZ    CONTINUE
  30.  
  31. 100 'PROTECT.BAS by Tom Kihlken.  RUN from BASIC to create PROTECT.COM.
  32. 110 CLS:PRINT "Checking DATA ...."
  33. 120 FOR B=1 TO 13:FOR C=1 TO 17:READ A$:IF C<17 THEN 140
  34. 130 Z#=Z#+VAL(A$)
  35. 140 NEXT:NEXT:IF Z#=18272 THEN RESTORE:GOTO 170
  36. 150 PRINT "Error.  Check the last number in"
  37. 160 PRINT "each DATA statement; then redo.":END
  38. 170 FOR B=1 TO 13:FOR C=1 TO 16:READ A$:TTL=TTL+VAL("&H"+A$)
  39. 180 NEXT:READ S:IF S=TTL THEN 200
  40. 190 PRINT "DATA error in line";B*10+240;" -- check and redo.":END
  41. 200 TTL=0:NEXT:RESTORE
  42. 210 OPEN "PROTECT.COM" AS #1 LEN=1:FIELD #1,1 AS D$
  43. 220 FOR B=1 TO 13:FOR C=1 TO 16:READ A$:LSET D$=CHR$(VAL("&H"+A$))
  44. 230 PUT #1:NEXT:READ DUMMY$:NEXT:CLOSE
  45. 240 PRINT "PROTECT.COM created.":END
  46. 250 DATA EB,2D,90,00,00,00,00,0F,80,FC,03,74,0A,80,FC,05,1333
  47. 260 DATA 74,05,2E,FF,2E,03,01,2E,80,3E,07,01,00,75,F3,80,1204
  48. 270 DATA FA,00,74,EE,80,FA,01,74,E9,B4,03,F9,CA,02,00,BA,2154
  49. 280 DATA 08,01,8C,C8,8E,C0,48,8E,D8,8B,F2,8B,FA,B9,04,00,2072
  50. 290 DATA FC,F3,A7,75,07,80,3E,07,01,0F,75,30,3D,01,00,75,1343
  51. 300 DATA E5,2E,C6,06,07,01,00,B8,13,35,CD,21,2E,89,1E,03,1197
  52. 310 DATA 01,2E,8C,06,05,01,0E,1F,BA,98,01,B4,09,CD,21,BA,1196
  53. 320 DATA 08,01,B8,13,25,CD,21,BA,2F,01,CD,27,F6,16,07,01,1241
  54. 330 DATA 80,3E,07,01,00,74,06,BA,B0,01,EB,04,90,BA,98,01,1405
  55. 340 DATA B4,09,0E,1F,CD,21,CD,20,48,61,72,64,20,44,69,73,1412
  56. 350 DATA 6B,20,50,72,6F,74,65,63,74,69,6F,6E,20,4F,6E,24,1459
  57. 360 DATA 48,61,72,64,20,44,69,73,6B,20,50,72,6F,74,65,63,1463
  58. 370 DATA 74,69,6F,6E,20,4F,66,66,24,00,00,00,00,00,00,00,793
  59.  
  60.  
  61. ; PROTECT.ASM
  62.  
  63. CSEG        SEGMENT
  64.         ASSUME CS:CSEG
  65.         ORG    100H
  66. START:        JMP    INITIALIZE
  67. OLDINT13    DD    ?
  68. SWITCH        DB    0FH
  69. NEWINT13    PROC    FAR
  70.         CMP    AH,03H
  71.         JZ    CHECKSTAT
  72.         CMP    AH,05H
  73.         JZ    CHECKSTAT
  74. CONTINUE:    JMP    CS:[OLDINT13]
  75. CHECKSTAT:    CMP    SWITCH,00H
  76.         JNZ    CONTINUE
  77.         CMP    DL,00H
  78.         JZ    CONTINUE
  79.         CMP    DL,01H
  80.         JZ    CONTINUE
  81. ABORT:        MOV    AH,03H
  82.         STC
  83.         RET    2
  84. NEWINT13    ENDP
  85. INITIALIZE:    MOV    DX,OFFSET NEWINT13
  86.         MOV    AX,CS
  87.         MOV    ES,AX
  88. NEXTSEG:    DEC    AX
  89.         MOV    DS,AX
  90.         MOV    SI,DX
  91.         MOV    DI,DX
  92.         MOV    CX,0004H
  93.         CLD
  94.         REPE    CMPSW
  95.         JNZ    NOTFOUND
  96.         CMP    DS:SWITCH,0FH
  97.         JNZ    TOGGLESW
  98. NOTFOUND:    CMP    AH,0001H
  99.         JNZ    NEXTSEG
  100.         MOV    SWITCH,00H
  101.         MOV    AX,3513H
  102.         INT    21H
  103.         MOV    WORD PTR CS:[OLDINT13],BX
  104.         MOV    WORD PTR CS:[OLDINT13+2],ES
  105.         PUSH    CS
  106.         POP    DS
  107.         MOV    DX,OFFSET PROTECT_ON
  108.         MOV    AH,09H
  109.         INT    21H
  110.         MOV    DX,OFFSET NEWINT13
  111.         MOV    AX,2513H
  112.         INT    21H
  113.         MOV    DX,OFFSET INITIALIZE
  114.         INT    27H
  115. TOGGLESW:    NOT    DS:SWITCH
  116.         CMP    DS:SWITCH,00H
  117.         JZ    ON
  118.         MOV    DX,OFFSET PROTECT_OFF
  119.         JMP    EXIT
  120. ON:        MOV    DX,OFFSET PROTECT_ON
  121. EXIT:        MOV    AH,09H
  122.         PUSH    CS
  123.         POP    DS
  124.         INT    21H
  125.         INT    20H
  126. PROTECT_ON    DB    "Hard Disk Protection On$"
  127. PROTECT_OFF    DB    "Hard Disk Protection Off$"
  128. CSEG        ENDS
  129.         END    START
  130.  
  131.